/**
 * 敏感词检查API服务
 */
import { get, post, put, del } from '@/utils/axios'

// 敏感词管理
export const sensitiveWordAPI = {
  // 分页查询敏感词
  getKeywords(params = {}) {
    return get('/api/sensitive-words', params)
  },

  // 查询敏感词详情
  getKeywordById(id) {
    return get(`/api/sensitive-words/${id}`)
  },

  // 添加敏感词
  addKeyword(data) {
    return post('/api/sensitive-words', data)
  },

  // 更新敏感词
  updateKeyword(id, data) {
    return put(`/api/sensitive-words/${id}`, data)
  },

  // 删除敏感词
  deleteKeyword(id) {
    return del(`/api/sensitive-words/${id}`)
  },

  // 批量删除敏感词
  batchDelete(ids) {
    return del('/api/sensitive-words/batch', ids)
  },

  // 更新敏感词状态
  updateStatus(id, status) {
    return put(`/api/sensitive-words/${id}/status`, { status })
  },

  // 批量更新状态
  batchUpdateStatus(ids, status) {
    return put('/api/sensitive-words/batch/status', null, {
      params: { ids, status }
    })
  },

  // 按分类查询
  getByCategory(category) {
    return get(`/api/sensitive-words/category/${category}`)
  },

  // 查询启用的敏感词
  getEnabledWords() {
    return get('/api/sensitive-words/enabled')
  },

  // 分类统计
  getCategoryStatistics() {
    return get('/api/sensitive-words/statistics')
  },

  // 批量导入敏感词
  batchImport(file) {
    const formData = new FormData()
    formData.append('file', file)
    return post('/api/sensitive-words/batch-import', formData, {
      headers: {
        'Content-Type': 'multipart/form-data'
      }
    })
  },

  // 导出敏感词
  exportKeywords(params = {}) {
    return get('/api/sensitive-words/export', params, {
      responseType: 'blob'
    })
  },

  // 获取默认敏感词库
  getDefaultKeywords() {
    return get('/api/sensitive-words/default-keywords')
  }
}

// 数据库配置管理
export const databaseAPI = {
  // 分页查询数据库配置
  getDatabases(params = {}) {
    return get('/api/databases', params)
  },

  // 查询数据库配置详情
  getDatabaseById(id) {
    return get(`/api/databases/${id}`)
  },

  // 创建数据库配置
  createDatabase(data) {
    return post('/api/databases', data)
  },

  // 更新数据库配置
  updateDatabase(id, data) {
    return put(`/api/databases/${id}`, data)
  },

  // 删除数据库配置
  deleteDatabase(id) {
    return del(`/api/databases/${id}`)
  },

  // 更新配置状态
  updateStatus(id, status) {
    return put(`/api/databases/${id}/status`, { status })
  },

  // 查询启用的配置
  getEnabledConfigs() {
    return get('/api/databases/enabled')
  },

  // 测试数据库连接（已保存配置）
  testConnection(id) {
    return post(`/api/databases/${id}/test-connection`)
  },

  // 测试连接配置（未保存）
  testConnectionConfig(config) {
    return post('/api/databases/test-connection', config)
  },

  // 获取数据库表列表
  getTables(id) {
    return get(`/api/databases/${id}/tables`)
  },

  // 获取表结构
  getTableStructure(id, tableName) {
    return get(`/api/databases/${id}/tables/${tableName}/structure`)
  },

  // 数据库类型统计
  getDbTypeStatistics() {
    return get('/api/databases/statistics')
  }
}

// 检查任务管理
export const checkTaskAPI = {
  // 分页查询检查任务
  getTasks(params = {}) {
    return get('/api/sensitive-check/tasks', params)
  },

  // 查询任务详情
  getTaskById(id) {
    return get(`/api/sensitive-check/tasks/${id}`)
  },

  // 创建并启动检查任务
  startCheck(data) {
    return post('/api/sensitive-check/start', data)
  },

  // 创建检查任务（不自动启动）
  createTask(data) {
    return post('/api/sensitive-check/tasks', data)
  },

  // 启动任务
  startTask(id) {
    return post(`/api/sensitive-check/tasks/${id}/start`)
  },

  // 停止任务
  stopTask(id) {
    return post(`/api/sensitive-check/stop/${id}`)
  },

  // 取消任务
  cancelTask(id) {
    return post(`/api/sensitive-check/tasks/${id}/cancel`)
  },

  // 删除任务
  deleteTask(id) {
    return del(`/api/sensitive-check/tasks/${id}`)
  },

  // 获取任务进度
  getProgress(id) {
    return get(`/api/sensitive-check/progress/${id}`)
  },

  // 获取运行中任务
  getRunningTasks() {
    return get('/api/sensitive-check/running')
  },

  // 获取待执行任务
  getPendingTasks() {
    return get('/api/sensitive-check/pending')
  },

  // 任务统计
  getTaskStatistics(days = 30) {
    return get('/api/sensitive-check/statistics', { days })
  },

  // 处理超时任务
  handleTimeoutTasks(timeoutMinutes = 60) {
    return post('/api/sensitive-check/handle-timeout', { timeoutMinutes })
  }
}

// 结果处理
export const resultAPI = {
  // 分页查询检查结果
  getResults(taskId, params = {}) {
    return get(`/api/sensitive-results/${taskId}`, params)
  },

  // 查询结果详情
  getResultById(id) {
    return get(`/api/sensitive-results/detail/${id}`)
  },

  // 查询任务所有结果
  getByTaskId(taskId) {
    return get(`/api/sensitive-results/task/${taskId}/all`)
  },

  // 查询高风险结果
  getHighRiskResults(taskId, minLevel = 3) {
    return get(`/api/sensitive-results/task/${taskId}/high-risk`, { minLevel })
  },

  // 忽略结果
  ignoreResult(id, reason) {
    return post(`/api/sensitive-results/${id}/ignore`, { reason })
  },

  // 批量忽略结果
  batchIgnore(ids, reason) {
    return post('/api/sensitive-results/batch-ignore', { ids, note: reason })
  },

  // 确认结果
  confirmResult(id, action) {
    return post(`/api/sensitive-results/${id}/confirm`, { action })
  },

  // 生成清理SQL
  generateCleanSQL(id, cleanType) {
    return post(`/api/sensitive-results/${id}/generate-clean-sql`, { cleanType })
  },

  // 批量生成清理SQL
  batchGenerateCleanSQL(ids, cleanType) {
    return post('/api/sensitive-results/batch-generate-clean-sql', { ids, cleanType })
  },

  // 执行清理SQL
  executeCleanSQL(sql, databaseId) {
    return post('/api/sensitive-results/execute-clean', { sql, databaseId })
  },

  // 结果统计
  getResultStatistics(taskId) {
    return get(`/api/sensitive-results/task/${taskId}/statistics`)
  },

  // 表列统计
  getTableColumnStatistics(taskId) {
    return get(`/api/sensitive-results/task/${taskId}/table-statistics`)
  },

  // 导出检查结果
  exportResults(taskId, format = 'excel') {
    return get(`/api/sensitive-results/${taskId}/export`, { format }, {
      responseType: 'blob'
    })
  },

  // 清理任务结果
  cleanTaskResults(taskId) {
    return del(`/api/sensitive-results/task/${taskId}`)
  },

  // 清理过期结果
  cleanExpiredResults(days = 30) {
    return del('/api/sensitive-results/expired', { data: { days } })
  }
}

// 测试相关API
export const testAPI = {
  // 健康检查
  healthCheck() {
    return get('/api/sensitive-test/health')
  },

  // 配置检查
  configCheck() {
    return get('/api/sensitive-test/config')
  },

  // 版本信息
  versionInfo() {
    return get('/api/sensitive-test/version')
  }
}
